package E_2024;

import java.util.Arrays;
import java.util.List;

/*
    某公司组织一场公开招聘活动，假设由于人数和场地的限制，
    每人每次面试的时长不等，并已经安排给定，用(S1,E1)、 (S2,E2)、 (Sj,Ej)…(Si < Ei，均为非负整数)表示每场面试的开始和结束时间。
    面试采用一对一的方式，即一名面试官同时只能面试一名应试者，一名面试官完成一次面试后可以立即进行下一场面试，且每个面试官的面试人次不超过 m。
    为了支撑招聘活动高效顺利进行，请你计算至少需要多少名面试官。
输入描述
    输入的第一行为面试官的最多面试人次 m，第二行为当天总的面试场次 n，
    接下来的 n 行为每场面试的起始时间和结束时间，起始时间和结束时间用空格分隔。
    其中， 1 <= n, m <= 500
输出描述
    输出一个整数，表示至少需要的面试官数量。
示例 1
    输入
    2
    5
    1 2
    2 3
    3 4
    4 5
    5 6
    输出
    3
    说明
    总共有 5 场面试，且面试时间都不重叠，但每个面试官最多只能面试 2 人次，所以需要 3 名面试官。
示例2
    输入
    3
    3
    1 2
    2 3
    3 4
    输出
    1
    说明
    总共有3场面试，面试时间都不重叠，每个面试官最多能面试3人次，所以只需要1名面试官。
示例3
    输入
    2
    4
    8 10
    11 13
    10 12
    12 13
    输出
    3
 */
public class E_200_8 {
    public static void main(String[] args) {
        System.out.println(ans(new int[][]{{8,10},{11,13},{10,12},{12,13}},2));
    }
    public static int ans(int[][] arr, int num){
        int[] temp = new int[4];
        for (int[] ints : arr) {
            for (int i = ints[0]; i < ints[1]; i++) {
                if (temp.length - 1 < i){
                    temp = Arrays.copyOf(temp,Math.max(temp.length << 1,i+1));
                }
                temp[i]++;
            }
        }
        int ans = 0;
        for (int i : temp) {
            ans = Math.max(i,ans);
        }
        return Math.max(ans,(arr.length + num - 1)/num);
    }
}
